package com.ts;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.annotation.Resource;
import javax.ejb.Stateless;
import javax.ejb.Timeout;
import javax.ejb.Timer;
import javax.ejb.TimerService;

import com.entidades.Mensagem;

@Stateless(mappedName = "TimerServiceRemote")
public class TimerServiceBean implements TimerServiceBeanRemote {

	@Resource
	TimerService timerService;

	private int processamentos;

	@PostConstruct
	private void inicio() {
		System.out.print("Criada uma nova instancia [ " + this + " ]");
	}

	@Timeout
	public void tempo(Timer timerObj) {
		System.out.print("-- TimerService Executando--");
		System.out.print("");
		Mensagem m = (Mensagem) timerObj.getInfo();
		SimpleDateFormat data = new SimpleDateFormat("dd/MM/yyyy HH:mm");
		System.out.println("Enviada por: " + m.getProprietario());
		System.out.println("Conteudo: " + m.getMensagem() + ".");
		System.out.println("Data de Agendamento: " + data.format(m.getData()));
	}

	public void processamento(Mensagem msg, Calendar c) {
		timerService.createTimer(c.getTime(), msg);
		processamentos++;
	}

	public List<Mensagem> listaTimer() {
		List<Mensagem> listaMessagens = new ArrayList<Mensagem>();
		Collection<Timer> lista = timerService.getTimers();
		for (Timer t : lista) {
			Mensagem m = ((Mensagem) t.getInfo());
			if (m != null) {
				listaMessagens.add(m);
			}
		}
		return listaMessagens;
	}

	public void removeTimer(int id) {
		Collection<Timer> lista = timerService.getTimers();
		for (Timer t : lista) {
			Mensagem m = ((Mensagem) t.getInfo());
			if (m.getId() == id) {
				t.cancel();
			}
		}
	}

	@PreDestroy
	private void fim() {
		System.out.print(" [ " + this + " ] realizou processamentos " + processamentos);
	}

}